import numpy as np
from datetime import datetime
import tkinter as tk
from tkinter import messagebox
import pygame
import os
import random

# 初始化 pygame 混音器
pygame.mixer.init()

def generate_sound(button=None):
    """播放或停止提示音乐"""
    if pygame.mixer.music.get_busy():
        # 如果音乐正在播放，停止播放
        pygame.mixer.music.stop()
        if button:
            button.configure(text='🔊')
        return
    
    def play_sound():
        try:
            # 随机选择音乐文件
            music_number = random.choice(['1', '2'])
            music_file = os.path.join(os.path.dirname(__file__), "assets", f"{music_number}.mp3")
            pygame.mixer.music.load(music_file)
            pygame.mixer.music.play()
            if button:
                button.configure(text='⏹')
            # 等待音乐播放完成
            while pygame.mixer.music.get_busy():
                pygame.time.Clock().tick(10)
            # 播放完成后恢复按钮图标
            if button:
                button.configure(text='🔊')
        except Exception as e:
            messagebox.showerror("错误", f"播放音乐失败：{str(e)}")
            if button:
                button.configure(text='🔊')
    
    # 创建并启动线程
    import threading
    sound_thread = threading.Thread(target=play_sound)
    sound_thread.daemon = True
    sound_thread.start()

def get_next_water_time(water_schedule, current_time):
    """获取下一个饮水时间"""
    times = sorted(water_schedule.keys())
    for time in times:
        if time > current_time:
            return time
    return times[0]  # 如果当前时间晚于最后一个时间，返回第二天第一个时间

def get_formatted_time():
    """获取格式化的当前时间"""
    return {
        'full_time': datetime.now().strftime('%Y/%m/%d %H:%M:%S'),
        'check_time': datetime.now().strftime('%H:%M')
    }


def analyze_body_data(entries, result_text, button=None):
    """处理身体数据分析的函数"""
    # 如果提供了按钮，则禁用它
    if button:
        button.configure(state='disabled', bg='#A8E0DA')
    
    # 收集表单数据并构建info对象
    info = {
        "身高": f"{entries['身高(cm)'].get()}cm",
        "体重": f"{entries['体重(kg)'].get()}kg",
        "性别": entries['性别'].get(),
        "运动频率": f"{entries['运动频率(次/周)'].get()}次/周",
        "饮食偏好": entries['饮食偏好'].get()
    }
    
    # 创建加载提示
    result_text.configure(state='normal')
    result_text.delete(1.0, tk.END)
    result_text.insert(tk.END, "分析中，请稍候...")
    result_text.configure(state='disabled')
    
    def api_call():
        try:
            # 调用AI接口
            from webAPI.Get_Qwen import Get_Qwen
            qwen = Get_Qwen()
            result = qwen.get_api(info)
            
            # 使用after方法在主线程中更新UI
            def update_result():
                result_text.configure(state='normal')
                result_text.delete(1.0, tk.END)
                result_text.insert(tk.END, result)
                result_text.configure(state='disabled')
                # 如果提供了按钮，则恢复其状态
                if button:
                    button.configure(state='normal', bg='#6BC5BB')
            
            # 在主线程中更新UI
            result_text.after(0, update_result)
            
        except Exception as e:
            def show_error():
                messagebox.showerror("错误", f"分析过程出现错误：{str(e)}")
                # 如果提供了按钮，则恢复其状态
                if button:
                    button.configure(state='normal', bg='#6BC5BB')
            result_text.after(0, show_error)
    
    # 创建并启动线程
    import threading
    thread = threading.Thread(target=api_call)
    thread.daemon = True  # 设置为守护线程
    thread.start()